//
//  SkiaRenderLibrary.h
//  SkiaRenderLibrary
//
//  Created by rui.yang on 2021/10/9.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIImage.h>

@interface SkiaRenderLibrary : NSObject

/// 初始化字体路径
/// @param fontsFilePath 字体路径
+ (void)initFontsFilePath:(NSString *)fontsFilePath;

/// 通用单个元素解析方法
/// @return 图片
/// @param elementJson 单个元素 json string
/// @param displayRatio 显示倍率
/// @param width 返回生成图像宽
/// @param height 返回生成图像高
/// @param error 错误信息
+ (UIImage *)generateImageFromElementJson:(NSString *)elementJson
                             displayRatio:(float)displayRatio
                                    width:(float &)width
                                   height:(float &)height
                               themeColor:(UIColor *)color
                                    error:(NSError **)error;

/// 预览/打印 时全量元素解析方法
/// @return 图片
/// @param printJson 预览/打印 json string
/// @param preview 是否为预览
/// @param ratio 显示倍率
/// @param printRatio 打印倍率
/// @param width 返回生成图像宽
/// @param height 返回生成图像高
/// @param printerMargin 打印机边距（不打印区域）（上左下右）
/// @param printerOffset 打印偏移 (垂直、水平)
/// @param orientation 出纸旋转角度
/// @param error 错误信息
+ (UIImage *)generateImageFromPrintJson:(NSString *)printJson
                                preview:(BOOL)preview
                                  ratio:(float)ratio
                             printRatio:(float)printRatio
                                  width:(float &)width
                                 height:(float &)height
                          printerMargin:(NSArray<NSNumber *> *)printerMargin
                          printerOffset:(NSArray<NSNumber *> *)printerOffset
                            orientation:(NSInteger)orientation
                             themeColor:(UIColor *)color
                                  error:(NSError **)error;

/// 预览/打印 时全量元素解析方法
/// @return 打印位图数据
/// @param printJson 预览/打印 json string
/// @param preview 是否为预览
/// @param ratio 显示倍率
/// @param printRatio 打印倍率
/// @param width 返回生成图像宽
/// @param height 返回生成图像高
/// @param printerMargin 打印机边距（不打印区域）（上左下右）
/// @param printerOffset 打印偏移 (垂直、水平)
/// @param orientation 出纸旋转角度
/// @param error 错误信息
+ (NSData *)generateDataFromPrintJson:(NSString *)printJson
                              preview:(BOOL)preview
                                ratio:(float)ratio
                           printRatio:(float)printRatio
                                width:(float &)width
                               height:(float &)height
                        printerMargin:(NSArray<NSNumber *> *)printerMargin
                        printerOffset:(NSArray<NSNumber *> *)printerOffset
                          orientation:(NSInteger)orientation
                           themeColor:(UIColor *)color
                                error:(NSError **)error;

/// mmToPixel
/// @param mm 厘米
/// @param scaler 倍率
+ (int)mmToPixel:(float)mm
          scaler:(float)scaler;

/// pixelToMm
/// @param pixel 像素
/// @param scaler 倍率
+ (float) pixelToMm:(int)pixel
             scaler:(float)scaler;

/// getDisplayMultiple
/// @param templatePhysical 屏幕物理尺寸
/// @param screenDisplaySize 屏幕宽
+ (float)getDisplayMultiple:(float)templatePhysical
       templateDisplayWidth:(int)screenDisplaySize;

/// mmToInch
/// @param mm 毫米
+ (float)mmToInch:(float)mm;

/// inchToMm
/// @param inch 英寸
+ (float)inchToMm:(float)inch;

/**
 检验条码内容是否规范。
 
 @param   text            条码内容。
 @param   barcodeMode     条码类型。
 @return  -1.不支持的一维码类型
          0:正常
          1:长度不符合要求
          2:存在非支持字符
          3.存在非支持字符且长度不对
          4.字符串为null
 */
+ (NSString *)checkBarCode:(NSString *)text
           withBarcodeMode:(NSUInteger)barcodeMode;


/**
 蓝牙/Wi-Fi返回处理后的条码内容。
 
 @param   text            条码内容。
 @param   barcodeMode     条码类型。
 @return  处理后的条码内容（也可用于检查条码内容是否规范，@"":表示出错）
 */
+ (NSString *)dealBarCodeText:(NSString *)text
              withBarcodeMode:(NSUInteger)barcodeMode;

/// 创建画板
+ (void)initDrawingBoard:(float)width
                  height:(float)height
                  rotate:(int)rotate
                    font:(NSString *)font;

/// 添加文本
+ (void)drawLableText:(float)x
                    y:(float)y
                width:(float)width
               height:(float)height
                value:(NSString *)value
           fontFamily:(NSString *)fontFamily
             fontSize:(float)fontSize
               rotate:(int)rotate
  textAlignHorizonral:(int)textAlignHorizonral
    textAlignVertical:(int)textAlignVertical
             lineMode:(int)lineMode
        letterSpacing:(float)letterSpacing
          lineSpacing:(float)lineSpacing
            fontStyle:(NSArray<NSNumber *> *)fontStyle;

/// 添加一维码
+ (void)drawLableBarCode:(float)x
                       y:(float)y
                   width:(float)width
                  height:(float)height
                codeType:(int)codeType
                   value:(NSString *)value
                fontSize:(float)fontSize
                  rotate:(int)rotate
              textHeight:(float)textHeight
            textPosition:(int)textPosition;

/// 添加二维码
+ (void)drawLableQrCode:(float)x
                      y:(float)y
                  width:(float)width
                 height:(float)height
                  value:(NSString *)value
               codeType:(int)codeType
                 rotate:(int)rotate;

/// 添加线
+ (void)drawLableLine:(float)x
                    y:(float)y
                width:(float)width
               height:(float)height
               rotate:(int)rotate
             lineType:(int)lineType
            dashwidth:(NSArray<NSNumber *> *)dashwidth;

/// 添加图形
+ (void)drawLableGraph:(float)x
                     y:(float)y
                 width:(float)width
                height:(float)height
             graphType:(int)graphType
                rotate:(int)rotate
          cornerRadius:(float)cornerRadius
             lineWidth:(float)lineWidth
              lineType:(int)lineType
             dashwidth:(NSArray<NSNumber *> *)dashwidth;

/// 添加图形
+ (void)drawLableImage:(NSString *)imageData
                     x:(float)x
                     y:(float)y
                 width:(float)width
                height:(float)height
                rotate:(int)rotate
   imageProcessingType:(int)imageProcessingType
  imageProcessingValue:(float)imageProcessingValue;

/// 生成画板 json
+ (NSData *)generateLableJson;

/// 获取图像库版本号
+ (NSString *)version;

@end
